extends Node

var 场景层:Node=null
var 弹窗层:Node=null

func 初始化(_场景层, _弹窗层):
	场景层=_场景层
	弹窗层=_弹窗层	

#region  场景部分
var 当前场景:Node=null:
	set(value):
		if 当前场景:
			当前场景.退出()			
			场景层.remove_child(当前场景)
			当前场景.queue_free()
		当前场景=value
		if 当前场景:
			场景层.add_child(当前场景)
			
func 切换场景(场景id:String):
	var 场景类=GameViewRegister.获取场景(场景id)
	if 场景类:
		当前场景=场景类.instantiate()
		当前场景.初始化(场景id)
		return 当前场景
	return null
	
func 重新加载当前场景():
	切换场景(当前场景.场景id)
#endregion

#region  弹窗部分	
func 获取弹窗(弹窗id:String):
	for 弹窗 in 弹窗层.get_children():
		if 弹窗.弹窗id==弹窗id:
			return 弹窗
	return null
	
#只生成不初始化数据
func _生成弹窗(弹窗id):
	var 弹窗类=GameViewRegister.获取场景(弹窗id)
	if 弹窗类:
		var 弹窗=弹窗类.instantiate()
		弹窗.弹窗id=弹窗id		
		弹窗层.add_child(弹窗)
		弹窗.隐藏()
		return 弹窗
	return null
	
func 设置弹窗常驻(弹窗id,常驻:bool):
	var 弹窗=获取弹窗(弹窗id)
	if 弹窗:
		弹窗.常驻=常驻
	
func _初始化弹窗(弹窗id,data:Dictionary={}):
	var 弹窗=获取弹窗(弹窗id)
	if not 弹窗:
		弹窗=_生成弹窗(弹窗id)
	if 弹窗:
		弹窗.初始化(data)	
		弹窗.隐藏()
		return 弹窗
	return null
	
func 打开弹窗(弹窗id,data:Dictionary={},显示:bool=true):
	var 弹窗=获取弹窗(弹窗id)
	if 弹窗:
		弹窗.关闭自己()
	if not 获取弹窗(弹窗id):
		弹窗=_初始化弹窗(弹窗id,data)
	if 显示:
		显示弹窗(弹窗id)
	return 获取弹窗(弹窗id)

func 显示弹窗(弹窗id:String):
	var 弹窗=获取弹窗(弹窗id)
	if 弹窗:
		弹窗.显示()
	return 弹窗

func 隐藏弹窗(弹窗id:String):
	var 弹窗=获取弹窗(弹窗id)
	if 弹窗:
		弹窗.隐藏()			
			
func 关闭弹窗(弹窗id:String):
	var 弹窗=获取弹窗(弹窗id)
	if 弹窗:
		弹窗.退出()
		弹窗层.remove_child(弹窗)
		弹窗.关闭()		
		
func 关闭所有弹窗():
	for 弹窗 in 弹窗层.get_children():
		弹窗.退出()
		弹窗层.remove_child(弹窗)
		弹窗.关闭()
#endregion
